import { execSync } from "child_process";
import path from "path";
import fs from "fs";
import { fileURLToPath } from "url";

// 获取当前模块路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 获取命令行参数
const args = process.argv.slice(2);
const appName = args[0] || "vue3-example";

// 检查应用是否存在
const appPath = path.join(__dirname, "..", "apps", appName);
if (!fs.existsSync(appPath)) {
  console.error(`应用 ${appName} 不存在于 apps 目录中`);
  process.exit(1);
}

// 检查应用的 package.json
const appPackageJsonPath = path.join(appPath, "package.json");
if (!fs.existsSync(appPackageJsonPath)) {
  console.error(`应用 ${appName} 中没有找到 package.json 文件`);
  process.exit(1);
}

// 读取并解析 package.json
const appPackageJson = JSON.parse(fs.readFileSync(appPackageJsonPath, "utf8"));

// 确定运行命令
let runCommand = "dev";
if (!appPackageJson.scripts || !appPackageJson.scripts.dev) {
  if (appPackageJson.scripts?.serve) {
    runCommand = "serve";
  } else if (appPackageJson.scripts?.start) {
    runCommand = "start";
  } else {
    console.error(
      `应用 ${appName} 的 package.json 中没有找到 dev、serve 或 start 脚本`
    );
    process.exit(1);
  }
}

console.log(`正在启动应用: ${appName}`);
console.log(`执行命令: pnpm --filter ${appName} run ${runCommand}`);

try {
  // 使用 pnpm 的工作区功能运行应用
  execSync(`pnpm --filter ./apps/${appName} run ${runCommand}`, {
    stdio: "inherit",
    cwd: path.join(__dirname, ".."), // 在根目录执行命令
  });
} catch (error) {
  console.error(`启动应用 ${appName} 时出错:`, error.message);
  process.exit(1);
}
